Micron Document
<!DOCTYPE html>
<html class="client-nojs vector-feature-night-mode-disabled vector-feature-language-in-header-enabled vector-feature-language-in-main-page-header-disabled vector-feature-page-tools-pinned-disabled vector-feature-toc-pinned-clientpref-1 vector-feature-main-menu-pinned-disabled vector-feature-limited-width-clientpref-1 vector-feature-limited-width-content-enabled vector-feature-custom-font-size-clientpref-1 vector-feature-appearance-pinned-clientpref-1 vector-sticky-header-enabled" lang="en" dir="ltr"><head>
<meta charset="UTF-8">
<title>Transact-SQL</title>
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<link rel="canonical" href="https://en.wikipedia.org/wiki/Transact-SQL"> <link href="./mw/ext.cite.styles.css" rel="stylesheet" type="text/css">
<link href="./mw/ext.pygments.css" rel="stylesheet" type="text/css">
<link href="./mw/skins.vector.icons.css" rel="stylesheet" type="text/css">
<link href="./mw/skins.vector.search.codex.styles.css" rel="stylesheet" type="text/css">
<link href="./mw/skins.vector.styles.css" rel="stylesheet" type="text/css">
<link href="./mw/user.styles.css" rel="stylesheet" type="text/css">
<meta name="ResourceLoaderDynamicStyles" content="">
<link rel="stylesheet" type="text/css" href="./mw/site.styles.css">
<link rel="stylesheet" type="text/css" href="./mw/noscript.css">
<link rel="stylesheet" type="text/css" href="./footer.css">
<link rel="stylesheet" type="text/css" href="./vector-2022.css">
</head>
<body class="skin--responsive skin-vector skin-vector-search-vue mediawiki ltr sitedir-ltr mw-hide-empty-elt ns-0 ns-subject page-Transact-SQL rootpage-Transact-SQL skin-vector-2022 action-view">
<div class="mw-page-container">
<div class="mw-page-container-inner">
<div class="mw-content-container">
<main id="content" class="mw-body">
<header class="mw-body-header vector-page-titlebar">
<h1 id="firstHeading" class="firstHeading mw-first-heading">
<span id="openzim-page-title" class="mw-page-title-main"><span class="mw-page-title-main">Transact-SQL</span></span>
</h1>
</header>
<a id="top"></a>
<div id="bodyContent" class="vector-body ve-init-mw-desktopArticleTarget-targetContainer" aria-labelledby="firstHeading" data-mw-ve-target-container="">
<div id="mw-content-text" class="mw-body-content mw-content-ltr" lang="en" dir="ltr"><div class="mw-content-ltr mw-parser-output" lang="en" dir="ltr">
<style data-mw-deduplicate="TemplateStyles:r1236090951">
/* start https://en.wikipedia.org/ */


.mw-parser-output .hatnote{font-style:italic}.mw-parser-output div.hatnote{padding-left:1.6em;margin-bottom:0.5em}.mw-parser-output .hatnote i{font-style:normal}.mw-parser-output .hatnote+link+.hatnote{margin-top:-0.5em}@media print{body.ns-0 .mw-parser-output .hatnote{display:none!important}}


/* end https://en.wikipedia.org/ */
</style><div role="note" class="hatnote navigation-not-searchable">"TSQL" redirects here. For the proposed temporal extension of SQL, see <a href="TSQL2" class="mw-redirect" title="TSQL2">TSQL2</a>.</div>
<style data-mw-deduplicate="TemplateStyles:r1251242444">
/* start https://en.wikipedia.org/ */


.mw-parser-output .ambox{border:1px solid #a2a9b1;border-left:10px solid #36c;background-color:#fbfbfb;box-sizing:border-box}.mw-parser-output .ambox+link+.ambox,.mw-parser-output .ambox+link+style+.ambox,.mw-parser-output .ambox+link+link+.ambox,.mw-parser-output .ambox+.mw-empty-elt+link+.ambox,.mw-parser-output .ambox+.mw-empty-elt+link+style+.ambox,.mw-parser-output .ambox+.mw-empty-elt+link+link+.ambox{margin-top:-1px}html body.mediawiki .mw-parser-output .ambox.mbox-small-left{margin:4px 1em 4px 0;overflow:hidden;width:238px;border-collapse:collapse;font-size:88%;line-height:1.25em}.mw-parser-output .ambox-speedy{border-left:10px solid #b32424;background-color:#fee7e6}.mw-parser-output .ambox-delete{border-left:10px solid #b32424}.mw-parser-output .ambox-content{border-left:10px solid #f28500}.mw-parser-output .ambox-style{border-left:10px solid #fc3}.mw-parser-output .ambox-move{border-left:10px solid #9932cc}.mw-parser-output .ambox-protection{border-left:10px solid #a2a9b1}.mw-parser-output .ambox .mbox-text{border:none;padding:0.25em 0.5em;width:100%}.mw-parser-output .ambox .mbox-image{border:none;padding:2px 0 2px 0.5em;text-align:center}.mw-parser-output .ambox .mbox-imageright{border:none;padding:2px 0.5em 2px 0;text-align:center}.mw-parser-output .ambox .mbox-empty-cell{border:none;padding:0;width:1px}.mw-parser-output .ambox .mbox-image-div{width:52px}@media(min-width:720px){.mw-parser-output .ambox{margin:0 10%}}@media print{body.ns-0 .mw-parser-output .ambox{display:none!important}}


/* end https://en.wikipedia.org/ */
</style><style data-mw-deduplicate="TemplateStyles:r1248332772">
/* start https://en.wikipedia.org/ */


.mw-parser-output .multiple-issues-text{width:95%;margin:0.2em 0}.mw-parser-output .multiple-issues-text>.mw-collapsible-content{margin-top:0.3em}.mw-parser-output .compact-ambox .ambox{border:none;border-collapse:collapse;background-color:transparent;margin:0 0 0 1.6em!important;padding:0!important;width:auto;display:block}body.mediawiki .mw-parser-output .compact-ambox .ambox.mbox-small-left{font-size:100%;width:auto;margin:0}.mw-parser-output .compact-ambox .ambox .mbox-text{padding:0!important;margin:0!important}.mw-parser-output .compact-ambox .ambox .mbox-text-span{display:list-item;line-height:1.5em;list-style-type:disc}body.skin-minerva .mw-parser-output .multiple-issues-text>.mw-collapsible-toggle,.mw-parser-output .compact-ambox .ambox .mbox-image,.mw-parser-output .compact-ambox .ambox .mbox-imageright,.mw-parser-output .compact-ambox .ambox .mbox-empty-cell,.mw-parser-output .compact-ambox .hide-when-compact{display:none}


/* end https://en.wikipedia.org/ */
</style>
<p><b>Transact-SQL</b> (<b>T-SQL</b>) is <a href="Microsoft" title="Microsoft">Microsoft</a>'s and <a href="Sybase" title="Sybase">Sybase</a>'s proprietary extension to the <a href="SQL" title="SQL">SQL</a> (Structured Query Language) used to interact with <a href="Relational_database" title="Relational database">relational databases</a>. T-SQL expands on the SQL standard to include <a href="Procedural_programming" title="Procedural programming">procedural programming</a>, <a href="Local_variable" title="Local variable">local variables</a>, various support functions for string processing, date processing, mathematics, etc. and changes to the <a href="Delete_(SQL)" title="Delete (SQL)">DELETE</a> and <a href="Update_(SQL)" title="Update (SQL)">UPDATE</a> statements.
</p><p>Transact-SQL is central to using <a href="Microsoft_SQL_Server" title="Microsoft SQL Server">Microsoft SQL Server</a>. All applications that communicate with an instance of SQL Server do so by sending Transact-SQL statements to the server, regardless of the user interface of the application.
</p><p><a href="Stored_procedure" title="Stored procedure">Stored procedures</a> in SQL Server are executable server-side routines. The advantage of stored procedures is the ability to pass parameters.
</p>
<meta property="mw:PageProp/toc">
<div class="mw-heading mw-heading2"><h2 id="Variables">Variables</h2></div>
<p>Transact-SQL provides the following statements to declare and set local variables: <code>DECLARE</code>, <code>SET</code> and <code>SELECT</code>.
</p>
<div class="mw-highlight mw-highlight-lang-tsql mw-content-ltr" dir="ltr"><pre><span class="k">DECLARE</span><span class="w"> </span><span class="nv">@var1</span><span class="w"> </span><span class="nc">NVARCHAR</span><span class="p">(</span><span class="mi">30</span><span class="p">);</span>
<span class="k">SET</span><span class="w"> </span><span class="nv">@var1</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="s1">'Some Name'</span><span class="p">;</span>
<span class="k">SELECT</span><span class="w"> </span><span class="nv">@var1</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">Name</span>
<span class="w"> </span><span class="k">FROM</span><span class="w"> </span><span class="n">Sales</span><span class="p">.</span><span class="n">Store</span>
<span class="w"> </span><span class="k">WHERE</span><span class="w"> </span><span class="n">CustomerID</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">100</span><span class="p">;</span>
</pre></div>
<div class="mw-heading mw-heading2"><h2 id="Flow_control">Flow control</h2></div>
<p>Keywords for flow control in Transact-SQL include <code>BEGIN</code> and <code>END</code>, <code>BREAK</code>, <code>CONTINUE</code>, <code>GOTO</code>, <code>IF</code> and <code>ELSE</code>, <code>RETURN</code>, <code>WAITFOR</code>, and <code>WHILE</code>.
</p><p><code>IF</code> and <code>ELSE</code> allow conditional execution. This batch statement will print "It is the weekend" if the current date is a weekend day, or "It is a weekday" if the current date is a weekday. (Note: This code assumes that Sunday is configured as the first day of the week in the <code>@@DATEFIRST</code> setting.)
</p>
<div class="mw-highlight mw-highlight-lang-tsql mw-content-ltr" dir="ltr"><pre><span class="k">IF</span><span class="w"> </span><span class="nf">DATEPART</span><span class="p">(</span><span class="n">dw</span><span class="p">,</span><span class="w"> </span><span class="nf">GETDATE</span><span class="p">())</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">7</span><span class="w"> </span><span class="ow">OR</span><span class="w"> </span><span class="nf">DATEPART</span><span class="p">(</span><span class="n">dw</span><span class="p">,</span><span class="w"> </span><span class="nf">GETDATE</span><span class="p">())</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">1</span>
<span class="w"> </span><span class="k">PRINT</span><span class="w"> </span><span class="s1">'It is the weekend.'</span><span class="p">;</span>
<span class="k">ELSE</span>
<span class="w"> </span><span class="k">PRINT</span><span class="w"> </span><span class="s1">'It is a weekday.'</span><span class="p">;</span>
</pre></div>
<p><code>BEGIN</code> and <code>END</code> mark a <a href="Block_of_statements" class="mw-redirect" title="Block of statements">block of statements</a>. If more than one statement is to be controlled by the conditional in the example above, we can use <code>BEGIN</code> and <code>END</code> like this:
</p>
<div class="mw-highlight mw-highlight-lang-tsql mw-content-ltr" dir="ltr"><pre><span class="k">IF</span><span class="w"> </span><span class="nf">DATEPART</span><span class="p">(</span><span class="n">dw</span><span class="p">,</span><span class="w"> </span><span class="nf">GETDATE</span><span class="p">())</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">7</span><span class="w"> </span><span class="ow">OR</span><span class="w"> </span><span class="nf">DATEPART</span><span class="p">(</span><span class="n">dw</span><span class="p">,</span><span class="w"> </span><span class="nf">GETDATE</span><span class="p">())</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">1</span>
<span class="k">BEGIN</span>
<span class="w"> </span><span class="k">PRINT</span><span class="w"> </span><span class="s1">'It is the weekend.'</span><span class="p">;</span>
<span class="w"> </span><span class="k">PRINT</span><span class="w"> </span><span class="s1">'Get some rest on the weekend!'</span><span class="p">;</span>
<span class="k">END</span><span class="p">;</span>
<span class="k">ELSE</span>
<span class="k">BEGIN</span>
<span class="w"> </span><span class="k">PRINT</span><span class="w"> </span><span class="s1">'It is a weekday.'</span><span class="p">;</span>
<span class="w"> </span><span class="k">PRINT</span><span class="w"> </span><span class="s1">'Get to work on a weekday!'</span><span class="p">;</span>
<span class="k">END</span><span class="p">;</span>
</pre></div>
<p><code>WAITFOR</code> will wait for a given amount of time, or until a particular time of day. The statement can be used for delays or to block execution until the set time.
</p><p><code>RETURN</code> is used to immediately return from a <a href="Stored_procedure" title="Stored procedure">stored procedure</a> or function.
</p><p><code>BREAK</code> ends the enclosing <code>WHILE</code> loop, while <code>CONTINUE</code> causes the next iteration of the loop to execute. An example of a <code>WHILE</code> loop is given below.
</p>
<div class="mw-highlight mw-highlight-lang-tsql mw-content-ltr" dir="ltr"><pre><span class="k">DECLARE</span><span class="w"> </span><span class="nv">@i</span><span class="w"> </span><span class="nc">INT</span><span class="p">;</span>
<span class="k">SET</span><span class="w"> </span><span class="nv">@i</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">0</span><span class="p">;</span>

<span class="k">WHILE</span><span class="w"> </span><span class="nv">@i</span><span class="w"> </span><span class="o">&lt;</span><span class="w"> </span><span class="mi">5</span>
<span class="k">BEGIN</span>
<span class="w"> </span><span class="k">PRINT</span><span class="w"> </span><span class="s1">'Hello world.'</span><span class="p">;</span>
<span class="w"> </span><span class="k">SET</span><span class="w"> </span><span class="nv">@i</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nv">@i</span><span class="w"> </span><span class="o">+</span><span class="w"> </span><span class="mi">1</span><span class="p">;</span>
<span class="k">END</span><span class="p">;</span>
</pre></div>
<div class="mw-heading mw-heading2"><h2 id="Changes_to_DELETE_and_UPDATE_statements">Changes to DELETE and UPDATE statements</h2></div>
<p>In Transact-SQL, both the <code>DELETE</code> and <code>UPDATE</code> statements are enhanced to enable data from another table to be used in the operation, without needing a subquery:
</p>
<ul><li><code>DELETE</code> accepts joined tables in the <code>FROM</code> clause, similarly to <code>SELECT</code>. When this is done, the name or alias of which table in the join is to be deleted from is placed between <code>DELETE</code> and <code>FROM</code>.</li>
<li><code>UPDATE</code> allows a <code>FROM</code> clause to be added. The table to be updated can be either joined in the <code>FROM</code> clause and referenced by alias, or referenced only at the start of the statement as per standard SQL.</li></ul>
<p>This example deletes all <code class="mw-highlight mw-highlight-lang-text mw-content-ltr" style="" dir="ltr">users</code> who have been flagged in the <code class="mw-highlight mw-highlight-lang-text mw-content-ltr" style="" dir="ltr">user_flags</code> table with the 'idle' flag.
</p>
<div class="mw-highlight mw-highlight-lang-tsql mw-content-ltr" dir="ltr"><pre><span class="k">DELETE</span><span class="w"> </span><span class="n">u</span>
<span class="k">FROM</span><span class="w"> </span><span class="n">users</span><span class="w"> </span><span class="k">AS</span><span class="w"> </span><span class="n">u</span><span class="w"> </span><span class="k">INNER</span><span class="w"> </span><span class="k">JOIN</span><span class="w"> </span><span class="n">user_flags</span><span class="w"> </span><span class="k">AS</span><span class="w"> </span><span class="n">f</span><span class="w"> </span><span class="k">ON</span><span class="w"> </span><span class="n">u</span><span class="p">.</span><span class="n">id</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">f</span><span class="p">.</span><span class="n">id</span>
<span class="k">WHERE</span><span class="w"> </span><span class="n">f</span><span class="p">.</span><span class="n">name</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="s1">'idle'</span><span class="p">;</span>
</pre></div>
<div class="mw-heading mw-heading2"><h2 id="BULK_INSERT">BULK INSERT</h2></div>
<p><code>BULK</code> is a Transact-SQL statement that implements a bulk data-loading process, inserting multiple rows into a table, reading data from an external sequential file. Use of <code>BULK INSERT</code> results in better performance than processes that issue individual <code>INSERT</code> statements for each row to be added. Additional details are available <a rel="nofollow" class="external text" href="http://msdn2.microsoft.com/en-us/library/ms188365.aspx">in MSDN</a>.
</p>
<div class="mw-heading mw-heading2"><h2 id="TRY_CATCH">TRY CATCH</h2></div>
<p>Beginning with SQL Server 2005,<sup id="cite_ref-1" class="reference"><a href="#cite_note-1"><span class="cite-bracket">[</span>1<span class="cite-bracket">]</span></a></sup> Microsoft introduced additional <code>TRY CATCH</code> logic to support exception type behaviour. This behaviour enables developers to simplify their code and leave out <code>@@ERROR</code> checking after each SQL execution statement.
</p>
<div class="mw-highlight mw-highlight-lang-sql mw-content-ltr" dir="ltr"><pre><span class="c1">-- begin transaction</span>
<span class="k">BEGIN</span><span class="w"> </span><span class="n">TRAN</span><span class="p">;</span>

<span class="k">BEGIN</span><span class="w"> </span><span class="n">TRY</span>
<span class="w"> </span><span class="c1">-- execute each statement</span>
<span class="w"> </span><span class="k">INSERT</span><span class="w"> </span><span class="k">INTO</span><span class="w"> </span><span class="n">MYTABLE</span><span class="p">(</span><span class="n">NAME</span><span class="p">)</span><span class="w"> </span><span class="k">VALUES</span><span class="w"> </span><span class="p">(</span><span class="s1">'ABC'</span><span class="p">);</span>
<span class="w"> </span><span class="k">INSERT</span><span class="w"> </span><span class="k">INTO</span><span class="w"> </span><span class="n">MYTABLE</span><span class="p">(</span><span class="n">NAME</span><span class="p">)</span><span class="w"> </span><span class="k">VALUES</span><span class="w"> </span><span class="p">(</span><span class="s1">'123'</span><span class="p">);</span>

<span class="w"> </span><span class="c1">-- commit the transaction</span>
<span class="w"> </span><span class="k">COMMIT</span><span class="w"> </span><span class="n">TRAN</span><span class="p">;</span>
<span class="k">END</span><span class="w"> </span><span class="n">TRY</span>
<span class="k">BEGIN</span><span class="w"> </span><span class="n">CATCH</span>
<span class="w"> </span><span class="c1">-- roll back the transaction because of error</span>
<span class="w"> </span><span class="k">ROLLBACK</span><span class="w"> </span><span class="n">TRAN</span><span class="p">;</span>
<span class="k">END</span><span class="w"> </span><span class="n">CATCH</span><span class="p">;</span>
</pre></div>
<div class="mw-heading mw-heading2"><h2 id="See_also">See also</h2></div>
<ul><li><a href="Adaptive_Server_Enterprise" title="Adaptive Server Enterprise">Adaptive Server Enterprise (Sybase)</a></li>
<li><a href="PL/SQL" title="PL/SQL">PL/SQL (Oracle)</a></li>
<li><a href="PL/pgSQL" title="PL/pgSQL">PL/pgSQL (PostgreSQL)</a></li>
<li><a href="SQL/PSM" title="SQL/PSM">SQL/PSM</a> (ISO standard)</li>
<li><a href="Tabular_Data_Stream" title="Tabular Data Stream">Tabular Data Stream</a></li></ul>
<div class="mw-heading mw-heading2"><h2 id="References">References</h2></div>
<style data-mw-deduplicate="TemplateStyles:r1239543626">
/* start https://en.wikipedia.org/ */


.mw-parser-output .reflist{margin-bottom:0.5em;list-style-type:decimal}@media screen{.mw-parser-output .reflist{font-size:90%}}.mw-parser-output .reflist .references{font-size:100%;margin-bottom:0;list-style-type:inherit}.mw-parser-output .reflist-columns-2{column-width:30em}.mw-parser-output .reflist-columns-3{column-width:25em}.mw-parser-output .reflist-columns{margin-top:0.3em}.mw-parser-output .reflist-columns ol{margin-top:0}.mw-parser-output .reflist-columns li{page-break-inside:avoid;break-inside:avoid-column}.mw-parser-output .reflist-upper-alpha{list-style-type:upper-alpha}.mw-parser-output .reflist-upper-roman{list-style-type:upper-roman}.mw-parser-output .reflist-lower-alpha{list-style-type:lower-alpha}.mw-parser-output .reflist-lower-greek{list-style-type:lower-greek}.mw-parser-output .reflist-lower-roman{list-style-type:lower-roman}


/* end https://en.wikipedia.org/ */
</style><div class="reflist">
<div class="mw-references-wrap"><ol class="references">
<li id="cite_note-1"><span class="mw-cite-backlink"><b><a href="#cite_ref-1">^</a></b></span> <span class="reference-text"><a rel="nofollow" class="external text" href="https://www.infoq.com/news/2012/03/T-SQL-2012">"T-SQL Improvements in SQL Server 2012"</a>, Jonathan Allen on Mar 19, 2012, infoq.com</span>
</li>
</ol></div></div>
<div class="mw-heading mw-heading2"><h2 id="External_links">External links</h2></div>
<ul><li><a rel="nofollow" class="external text" href="https://docs.microsoft.com/en-us/sql/t-sql/language-reference">Transact-SQL Reference</a></li>
<li><a rel="nofollow" class="external text" href="http://www.tsql.info">Transact-SQL Tutorial</a></li></ul></div><!--htdig_noindex--><div><div class="zim-footer">
This article is issued from <a class="external text" title="Last edited on 2023-06-08" href="https://en.wikipedia.org/wiki/?title=Transact-SQL&amp;oldid=1159115189">Wikipedia</a>. The text is available under <a class="external text" href="https://creativecommons.org/licenses/by-sa/4.0/deed.en">Creative Commons Attribution-Share Alike 4.0</a> unless otherwise noted. Additional terms may apply for the media files.
</div>
</div><!--/htdig_noindex--></div>
</div>
</main>
</div>
</div>
</div>

</body></html>